package br.ita.trucocearense.server.core;

import br.ita.trucocearense.server.core.dao.UsuarioDaoImpl;
import br.ita.trucocearense.server.domain.Usuario;

public class Jogo {

	private Mesa mesa;
	private Partida partida;
	private int numeroDaPartida = 0;
	private boolean finalDoJogo = false;
	private int equipeVencedora;
	private int equipeVencedoraPartidaAnterior;
	

	public boolean isFinalDoJogo() {
		return finalDoJogo;
	}


	private void setFinalDoJogo(boolean finalDoJogo) {
		this.finalDoJogo = finalDoJogo;
	}


	public int getEquipeVencedora() {
		return equipeVencedora;
	}


	private void setEquipeVencedora(int equipeVencedora) {
		this.equipeVencedora = equipeVencedora;
		this.atualizaScoreVencedores(equipeVencedora);
		
	}
	
	private void atualizaScoreVencedores(int equipeVencedora){
		UsuarioDaoImpl dao = new UsuarioDaoImpl();
		Usuario user;
		for(int i = 0; i < 2; i++){
			user = this.mesa.getEquipe()[equipeVencedora].getMembro()[i];
			user.incScore(300);
			dao.update(user);

			System.out.println(user.getApelido() + " " + user.getScore() + " - ATUALIZADO");
		}
	}


	public int getNumeroDaPartida() {
		return numeroDaPartida;
	}


	public void incNumeroDaPartida() {
		this.numeroDaPartida++;
	}


	public Jogo(Mesa mesa) {
		this.mesa = mesa;
	}
	

	public void atualizarPlacar(){
		this.partida.atualizarPlacar();
		if (this.partida.isFinalDaPartida()){	
			if (this.partida.isEmpate())
				this.setEquipeVencedoraPartidaAnterior(-1);
			else
				this.setEquipeVencedoraPartidaAnterior(this.partida.getEquipeVencedora());
			this.decidirJogo();
		}
	}
	
	private void decidirJogo(){
		for(int equipe = 0; equipe < 2; equipe++)
			if (this.mesa.getEquipe()[equipe].getPontuacaoJogo() >= 2){
				this.setEquipeVencedora(equipe);
				this.setFinalDoJogo(true);
			}
	}
	
	public void iniciarPartida(){
		this.partida = new Partida(mesa,this.getNumeroDaPartida()%4);
		this.incNumeroDaPartida();
		this.partida.iniciarRodada();
	}
	
	public Partida getPartida() {
		return partida;
	}

	public Mesa getMesa() {
		return mesa;
	}


	public int getEquipeVencedoraPartidaAnterior() {
		return equipeVencedoraPartidaAnterior;
	}


	private void setEquipeVencedoraPartidaAnterior(int equipeVencedoraPartidaAnterior) {
		this.equipeVencedoraPartidaAnterior = equipeVencedoraPartidaAnterior;
	}

}
